(function() {

	var Game = window.Game = function(params) {
		// 得到画布
		this.canvas = document.querySelector(params.id);
		// 上下文
		this.ctx = this.canvas.getContext("2d");
		// 资源文件地址
		this.Rjsonurl = params.Rjsonurl;
		// 帧编号
		this.fno = 0;
		// 设置画布的宽度和高度
		this.init();
		// 分数
		this.score = 0;
		// 读取资源
		var self = this;
		// 读取资源是一个异步函数，所以我们不知道什么时候执行完毕，但是其它的事情必须等到它完毕之后在执行
		this.loadAllResource(function() {
			// 我们封装的回调函数，这里表示全部资源读取完毕
			console.log("加载完毕！")
			self.start();
			// 绑定监听事件
//			self.bindEvent();
		});

	}
	// 初始化，设置画布的宽度和高度
	Game.prototype.init = function() {

		// 读取视口的宽度和高度
		var windowW = document.documentElement.clientWidth,
			windowH = document.documentElement.clientHeight;
		// 验收
		if(windowW > 414) {
			windowW = 414;
		} else if(windowW < 320) {
			windowW = 320;
		}
		if(windowH > 736) {
			windowH = 736;
		} else if(windowH < 500) {
			windowH = 500;
		}
		// 让canvas匹配视口
		this.canvas.width = windowW;
		this.canvas.height = windowH;
	}
	// 读取资源
	Game.prototype.loadAllResource = function(callback) {
		// 准备一个r对象
		this.r = {};
		// 备份
		var self = this;
		// 计数器
		var obj_number = 0;
		// 发出请求，请求json文件
		var xhr = new XMLHttpRequest();
		xhr.open("get", this.Rjsonurl);
		xhr.send();
		xhr.onreadystatechange = function() {
			if(xhr.readyState == 4) {
				var r_obj = JSON.parse(xhr.responseText);
				// 遍历数组
				for(var i = 0; i < r_obj.images.length; i++) {
					// 创建一个同名的key
					self.r[r_obj.images[i].name] = new Image();
					// 请求
					self.r[r_obj.images[i].name].src = r_obj.images[i].url;
					// 监听
					self.r[r_obj.images[i].name].onload = function() {
						obj_number++;
						// 清屏
						self.ctx.clearRect(0, 0, self.canvas.width, self.canvas.height);
						// 提示文字
						var txt = "正在加载资源" + obj_number + "/" + r_obj.images.length + "，请稍后~~";
						// 文字放置居中，屏幕的黄金分割点
						self.ctx.textAlign = "center";
						self.ctx.font = "20px 微软雅黑";
						self.ctx.fillText(txt, self.canvas.width / 2, self.canvas.height * (1 - 0.618));
						// 判断是否已经全部加载完毕
						if(obj_number == r_obj.images.length) {
							callback();
						}
					}
				}
			}
		}
		console.log(this.r)
	}
	// 开始游戏
	Game.prototype.start = function() {
//		// 实例化背景
//		this.background = new Background();
//		// 实例化大地
//		this.land = new Land();
//		// 管子数组
//		this.pipe_Arr = [];
//		// 实例化小鸟
//		this.bird = new Bird();
		// 实例化自己的场景管理器
		this.sm = new SceneManager();
		// 备份
		var self = this; 
		
		// 设置定时器	
		this.timer = setInterval(function() {
			// 清屏
			self.ctx.clearRect(0, 0, self.canvas.width, self.canvas.height);
			// 帧编号
			self.fno++;
			// 场景管理器的渲染和更新
			self.sm.updata();	
			self.sm.render();
//			// 更新背景
//			self.background.updata();
//			// 渲染背景
//			self.background.render();
//			// 更新大地
//			self.land.updata();
//			// 渲染大地
//			self.land.render();
//			// 更新渲染所有管子
//			for (var i = 0; i < self.pipe_Arr.length; i++) {
//				self.pipe_Arr[i].updata();
//				// 验证这个管子是不是还在数组中
//				self.pipe_Arr[i] && self.pipe_Arr[i].render();
//			}
//			// 更新鸟
//			self.bird.updata();	
//			// 渲染鸟
//			self.bird.render();	
//			
	//			// 打印当前分数
	//			var scoreLength = self.score.toString().length; // 得到当前分数的位数
	//			// 循环语句去设置图片的显示，有一个基准位置就是self.canvas.width / 2 - scoreLength / 2 * 34
	//			for (var i = 0; i < scoreLength; i++) {				
	//				self.ctx.drawImage(self.r["shuzi"+ self.score.toString().charAt(i)],self.canvas.width / 2 - scoreLength / 2 * 34 + 34 * i,100);			
	//			}
//			
//			
//			// 每多少帧实例化管子
//			(self.fno % 120 === 0) && (new Pipe());
			// 打印帧编号
			self.ctx.font = "16px consolas";
			self.ctx.textAlign = "left";
			self.ctx.fillStyle = "black";
			self.ctx.fillText("FNO:" + self.fno, 10, 20);
			self.ctx.fillText("场景号:" + self.sm.sceneNumber, 10, 50);
		}, 20)			
	}
	// 监听小鸟
//	Game.prototype.bindEvent = function(){
//		var self = this;
//		this.canvas.onclick = function(){
//			self.bird.fly();
//		}
//	}
})();